﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MyWCFServices.RealRestaurantService;
using ITKRestaurant.RestaurantServiceReference;

namespace ITKRestaurant
{
    /// <summary>
    /// Interaction logic for EtteremGUI.xaml
    /// </summary>
    public partial class EtteremGUI : Window
    {

        List<AsztalGUI> asztalok = new List<AsztalGUI>();

        RestaurantServiceClient client = null;

        RendelesGUI rendelesgui = null;

        SzamlazoGUI szamlaz = null;

        Dictionary<Asztal, Guid> rendelesID = new Dictionary<Asztal,Guid>();

        private MainWindow _mainWindow = null;

        Asztal asztal;
        AsztalGUI akt_asztalgui;

        private struct tetelek 
        {
            public string tetel { set; get; }
            public string ar { set; get; }
        }

        public EtteremGUI(RestaurantServiceClient c, MainWindow mw)
        {
            this.client = c;
            this._mainWindow = mw;
            InitializeComponent();
            initAsztalok();
            this.label1.Visibility = Visibility.Hidden;
        }

        private void InitDatabase()
        {
            Asztal a1 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 1, 0, 1, -750, -290);
            Asztal a2 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 1, 1, 2, -300, -290);
            Asztal a3 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 2, 2, 2, -750, 10);
            Asztal a4 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 3, 3, 3, -750, 290);
            Asztal a5 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 3, 0, 0, 130, -290);
            Asztal a6 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 4, 0, 0, 130, 10);
            Asztal a7 = new Asztal(new List<Arak>().ToArray(), Guid.Empty, 4, 0, 0, 130, 310);

            this.client.AddTable(a1);
            this.client.AddTable(a2);
            this.client.AddTable(a3);
            this.client.AddTable(a4);
            this.client.AddTable(a5);
            this.client.AddTable(a6);
            this.client.AddTable(a7);

        }

        public void initAsztalok()
        {
            List<Asztal> asztalok = this.client.GetAllTables().ToList();

            if (asztalok.Count == 0)
            {
                InitDatabase();
                asztalok = this.client.GetAllTables().ToList();
            }
            int aszam = 0;
            foreach (Asztal asztal in asztalok)
            {
                asztal.AsztalSzam = ++aszam;

                if (this.client.GetFoglalasList(asztal.AsztalID).Length > 0)
                {
                    asztal.AsztalStatusz = 2;
                }

                this.asztalok.Add(new AsztalGUI(asztal));
            }

            //List<Arak> tesztArak = new List<Arak>();
            //tesztArak.Add(new Arak("Hagymás rostélyos", 2000));
            //tesztArak.Add(new Arak("Kóla", 200));
            //tesztArak.Add(new Arak("Húsleves", 600));

            //asztalok[0].AsztalTetelek = tesztArak.ToArray();
            //asztalok[0].AsztalStatusz = 1;
            //asztalok[0].AsztalFo = 2;

            foreach (Asztal asztal in asztalok)
            {
                if (asztal.AsztalTetelek == null)
                    asztal.AsztalTetelek = new List<Arak>().ToArray();
                this.asztalok.Add(new AsztalGUI(asztal));
            }

             for (int i = 0; i < this.asztalok.Count; i++)
             {
                 this.mainGrid.Children.Add(this.asztalok.ElementAt(i));
                 //System.Console.WriteLine(this.asztalok.ElementAt(i).getAsztal().AsztalX + " , " + this.asztalok.ElementAt(i).getAsztal().AsztalY + ", " + this.asztalok.ElementAt(i).getAsztal().AsztalTetelek.ToString());
                 this.asztalok.ElementAt(i).MouseDown += new MouseButtonEventHandler(tableClick);
             }
        }

        private void tableClick(object sender, EventArgs e)
        {

            akt_asztalgui = (AsztalGUI)sender;
            //System.Console.WriteLine(akt_asztalgui.getAsztal().AsztalID);
            asztal = akt_asztalgui.getAsztal();
            this.fillForm(asztal.AsztalSzam, asztal.AsztalStatusz, asztal.AsztalTime, asztal.AsztalFo, asztal.AsztalTetelek.ToList());

            if (asztal.AsztalStatusz == 0)
            {
                this.button3.IsEnabled = false;
            }
            else
            {
                this.button3.IsEnabled = true;
            }
           
        }

        public void fillForm(int asztalSzam, int statusz, DateTime time, int fo, List<Arak> tetelek)
        {
            this.button4.Content = asztalSzam+". asztal";

            if (statusz == 1) { this.label30.Content = "MEGTELT"; }
            else if (statusz == 2) { this.label30.Content = "FOGLALT"; }
            else if (statusz == 3) { this.label30.Content = "MEGTELT"; }
            else { this.label30.Content = "SZABAD"; }

            this.textBox1.Text = fo.ToString();

            this.dataGrid1.Columns.Clear();
            this.dataGrid1.Items.Clear();

            this.dataGrid1.IsReadOnly = true;

            if (tetelek.Count != 0)
            {
                for (int i = 0; i < tetelek.Count; i++)
                {
                    this.dataGrid1.Items.Add(new tetelek() { tetel = tetelek.ElementAt(i).Tetel, ar = "" + tetelek.ElementAt(i).Ar + " Ft" });
                }

                DataGridTextColumn col1 = new DataGridTextColumn();
                col1.Binding = new Binding("tetel");

                DataGridTextColumn col2 = new DataGridTextColumn();
                col2.Binding = new Binding("ar");

                dataGrid1.Columns.Add(col1);
                dataGrid1.Columns.Add(col2);

                col1.Header = "Tétel";
                col1.Width = 200;
                col2.Header = "Ár";
                col2.Width = 100;
            }
        }
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (MessageBox.Show("Biztosan kilép a programból?", "Kilépés", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                try
                {
                    Console.Write("Kapcsolat lezárása... ");
                    client.Close(); // kapcsolat lezárása
                    Console.WriteLine("sikeres.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Hiba történt: " + ex.Message);
                }
                _mainWindow.Close();
            }
            else
            {
                e.Cancel = true;
            }
        }

        private void image1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            this.Close();
            _mainWindow.Close();
        }

        private void button5_Click(object sender, RoutedEventArgs e)
        {
            rendelesgui = new RendelesGUI(client, asztal,this);
            rendelesgui.Show();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {

            if (akt_asztalgui == null)
            {
                MessageBox.Show("Kérem válasszon ki egy asztalt!", "Figyelem!", MessageBoxButton.OK);
            }
            else
            {
                akt_asztalgui.getAsztal().AsztalStatusz = 2;
                akt_asztalgui.Set_Changes();
                //System.Console.WriteLine(akt_asztalgui.getAsztal().AsztalID);
                FoglalasokGUI foglalasGUI = new FoglalasokGUI(akt_asztalgui, this.client.GetFoglalasList(akt_asztalgui.getAsztal().AsztalID), this.client);
                //FoglalasokGUI foglalasGUI = new FoglalasokGUI(akt_asztalgui.getAsztal(), new Foglalas[0], this.client);
                foglalasGUI.Visibility = Visibility.Visible;
            }
        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("Biztosan felszabaítja az asztalt?", "Asztal felszabadítása", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                akt_asztalgui.getAsztal().AsztalTetelek = new Arak[0];
                akt_asztalgui.getAsztal().AsztalStatusz = 0;
                akt_asztalgui.Set_Changes();
                setMenuChanges();
            }
        }

        public void setMenuChanges()
        {
            this.fillForm(asztal.AsztalSzam, asztal.AsztalStatusz, asztal.AsztalTime, asztal.AsztalFo, asztal.AsztalTetelek.ToList());
        }

        private void button7_Click(object sender, RoutedEventArgs e)
        {
            rendelesID.Add(asztal, client.Rendeles(asztal));
            szamlaz = new SzamlazoGUI(  client.Szamla(rendelesID[asztal]));
            szamlaz.Show();

        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.akt_asztalgui.getAsztal().AsztalFo = int.Parse(this.textBox1.Text);

            if (this.akt_asztalgui.getAsztal().AsztalFo > 0)
            {
                this.akt_asztalgui.getAsztal().AsztalStatusz = 1;
            }

            this.akt_asztalgui.Set_Changes();

            this.client.UpdateTable(this.akt_asztalgui.getAsztal());

        }

        private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            double num = 0;
            bool success = double.TryParse(((TextBox)sender).Text, out num);
            if (success & num >= 0)
            {
                if (num > 0)
                {
                    this.label30.Content = "MEGTELT";
                }
                else
                {
                    this.label30.Content = "SZABAD";
                }
                this.label1.Visibility = Visibility.Hidden;
            }
            else
            {
                this.label30.Content = "SZABAD";
                this.label1.Visibility = Visibility.Visible;
            }
        } 

    }
}
